// -*- Mode: C++ -*-
/*
 * Class to handle the formatted string as returned from the fortran decoder
 *
 * VK3ACF August 2013
 */


#ifndef DECODEDTEXT_H
#define DECODEDTEXT_H

#include <QString>



/*
0123456789012345678901234567890123456789
^    ^    ^   ^    ^  ^
2343 -11  0.8 1259 #  YV6BFE F6GUU R-08
2343 -19  0.3  718 #  VE6WQ SQ2NIJ -14
2343  -7  0.3  815 #  KK4DSD W7VP -16
2343 -13  0.1 3627 @  CT1FBK IK5YZT R+02

0605  Tx      1259 #  CQ VK3ACF QF22
*/

class DecodedText
{
public:
  void operator=(const QString &rhs)
  {
    _string = rhs;
    padding_ = _string.indexOf (" ") > 4 ? 2 : 0; // allow for seconds
  };
  void operator=(const QByteArray &rhs)
  {
    _string = rhs;
    padding_ = _string.indexOf (" ") > 4 ? 2 : 0; // allow for seconds
  };

  void operator+=(const QString &rhs)
  {
    _string += rhs;
  };

  QString string() { return _string; };

  int indexOf(QString s) { return _string.indexOf(s); };
  int indexOf(QString s, int i) { return _string.indexOf(s,i); };
  QString mid(int f, int t) { return _string.mid(f,t); };
  QString left(int i) { return _string.left(i); };

  void clear() { _string.clear(); };

  QString CQersCall();

  bool isJT65();
  bool isJT9();
  bool isTX();
  bool isLowConfidence ();
  int frequencyOffset();  // hertz offset from the tuned dial or rx frequency, aka audio frequency
  int snr();
  float dt();

  // find and extract any report. Returns true if this is a standard message
  bool report(QString const& myBaseCall, QString const& dxBaseCall, /*mod*/QString& report);

  // get the first message text word, usually the call
  QString call();

  // get the second word, most likely the de call and the third word, most likely grid
  void deCallAndGrid(/*out*/QString& call, QString& grid);

  int timeInSeconds();

  // returns a string of the SNR field with a leading + or - followed by two digits
  QString report();

private:
  // These define the columns in the decoded text where fields are to be found.
  // We rely on these columns being the same in the fortran code (lib/decoder.f90) that formats the decoded text
  enum Columns {column_time    = 0,
      column_snr     = 5,
      column_dt      = 9,
      column_freq    = 14,
      column_mode    = 19,
      column_qsoText = 22 };

  QString _string;
  int padding_;
};

#endif // DECODEDTEXT_H
